#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

//myfile helloworld
//int main(int argc, char *argv[])
int main()
{

    printf("%d\n",fileno(stdout));
   // C语言提供的
   printf("hello printf\n");
   fprintf(stdout, "hello fprintf\n");
   const char *s = "hello fputs\n";
   fputs(s, stdout);

   // OS提供的
   const char *ss = "hello write\n";
   write(1, ss, strlen(ss));
   // fflush(stdout);
   fork();

   //fork(); //创建子进程






















//    if(argc != 2){
//        return 2;
//    }
//    int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
//    //int fd = open("log.txt", O_WRONLY | O_CREAT | O_APPEND);
//    if(fd < 0)
//    {
//        perror("open");
//        return 1;
//    }
//    dup2(fd, 1);
//    fprintf(stdout, "%s\n", argv[1]); //stdout->1->显示器
//
//    close(fd);

    //close(1);
    //int fd = open("log.txt", O_WRONLY | O_TRUNC | O_CREAT);
    //int fd = open("log.txt", O_WRONLY | O_APPEND | O_CREAT);
    //if(fd<0) 
    //{
    //    perror("open");
    //    return 1;
    //}

    //fprintf(stdout, "you can see me , success\n");

    //printf("fd: %d\n", fd);

    //char buffer[64];
    //fgets(buffer, sizeof buffer, stdin);

    //printf("%s\n", buffer);


    //close(1);
    //// 这里的fd的分配规则是: 最小的，没有被占用的文件描述符
    //// 0,1,2 -> close(1) -> fd -> 1
    //int fd = open("log.txt", O_WRONLY | O_CREAT | O_TRUNC, 0666);
    //if(fd < 0)
    //{
    //    perror("open");
    //    return 1;
    //}
    //// 都应该是往显示器（标准输出)打印的！
    //// 但是下面的都写入(显示)到了log.txt
    //// 这是什么呢？输出重定向
    //printf("fd: %d\n", fd); // stdout->FILE{fileno=1}->log.txt
    //printf("fd: %d\n", fd);
    //printf("fd: %d\n", fd);
    //printf("fd: %d\n", fd);
    //printf("fd: %d\n", fd);
    //printf("fd: %d\n", fd);
    //fprintf(stdout, "hello fprintf\n");
    //const char *s = "hello fwrite\n";
    //fwrite(s, strlen(s), 1, stdout);

    ////////////////////////////////不关心
    //fflush(stdout); 
    ////stdout->_fileno == 1;
    //close(fd); //后面解释
    return 0;
}
